home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_08_04 / 8n04027a < prev    next >
Text File  |  1990-03-18  |  944b  |  52 lines

  1. *****Listing 2*****
  2.  
  3. #include <stdio.h>
  4. #include <setjmp.h>
  5.  
  6. main()
  7. {
  8.     double value, result;
  9.     jmp_buf context;
  10.     double mysqrt(double value, jmp_buf context);
  11.  
  12.     while (1) {
  13.         if (setjmp(context) != 0)
  14.             printf("Value is out of the domain for sqrt\n");
  15.  
  16.         printf("Enter fp value: ");
  17.         scanf("%lf", &value);
  18.         if (value == -1.0)
  19.             return;
  20.         result = mysqrt(value, context);
  21.         printf("sqrt(%f) = %f\n", value, result);
  22.     }
  23. }
  24.  
  25.  
  26. #include <errno.h>
  27. #include <math.h>
  28.  
  29. double mysqrt(double value, jmp_buf context)
  30. {
  31.     double d;
  32.  
  33.     errno = 0;
  34.     d = sqrt(value);
  35.     if (errno == EDOM)
  36.         longjmp(context, 1);
  37.     else
  38.         return (d);
  39. }
  40.  
  41. Enter fp value: 1.234
  42. sqrt(1.234000) = 1.110856
  43. Enter fp value: 12345
  44. sqrt(12345.000000) = 111.108056
  45. Enter fp value: -0.000000
  46. sqrt(-0.000000) = -0.000000
  47. Enter fp value: -0.0000001
  48. Value is out of the domain for sqrt
  49. Enter fp value: -5
  50. Value is out of the domain for sqrt
  51.  
  52.